// 发布订阅
// 发布订阅模式，订阅者可以订阅一个发布者，发布者可以发布一个消息，
// 所有的订阅者可以接收到消息

// 形式 const pubsub = new PubSub();
// 订阅的参数 : 
// 参数1 : event : 类型 西瓜
// 参数2 : 等着 function(msg) {console.log(msg)}) 
// pubsub.subscribe('报纸', function(msg) {}) 
// 发布的参数 :
// pubsub.publish('西瓜', 'hello') // 发布

class PubSub {
  constructor() {
    // 存起来 : {西瓜 : [function(msg) {console.log(msg)},function(msg) {console.log(msg)},]}
    // 存起来 : {小魔仙 : [function(msg) {console.log(msg)},function(msg) {console.log(msg)},]}
    this.subscribers = {};
  }
  // 订阅
  subscribe(event, callback) { // 123 ()=>{}
    // 如果没有这个事件，那么就创建一个
    if (!this.subscribers[event]) {
      this.subscribers[event] = [];
    }
    this.subscribers[event].push(callback)
  }
  // 发布
  publish(event, data) {
    if(!this.subscribers[event]){
      return 
    }
    this.subscribers[event].forEach(callback=>callback(data))
  }
}
const pubsub = new PubSub()

pubsub.subscribe('西瓜', function(msg) {
  console.log(msg)
})

pubsub.subscribe('西瓜', function(msg) {
  console.log(msg)
})

pubsub.subscribe('葡萄', function(msg) {
  console.log(msg)
})
pubsub.subscribe('日本和牛用啤酒按摩过的盖浇饭', function(msg) {
  console.log(msg)
})

// 发布
pubsub.publish('日本和牛用啤酒按摩过的盖浇饭','想吃吗?')